package cn.jji8.createX;

import cn.jji8.createX.build.Build;
import cn.jji8.createX.function.fill.FillManger;
import cn.jji8.createX.function.fill.canPlaceBlock.FillCanPlaceBlock;
import cn.jji8.createX.function.wand.canPlaceBlock.WandFunctionBook;
import cn.jji8.createX.manipulate.Menu;
import cn.jji8.createX.build.LoadRes;
import cn.jji8.createX.slowPlaceBlock.SlowPlaceBlockManger;
import cn.jji8.patronSaint.cStats.Metrics;
import cn.jji8.patronSaint.quick.command.CommandManger;
import cn.jji8.patronSaint.quick.config.ConfigManger;
import cn.jji8.patronSaint.quick.config.IntSet;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;

import java.io.File;
import java.util.ArrayList;
import java.util.List;


@SuppressWarnings("unused")
public class Main extends JavaPlugin {
    static Main main;
    static CommandManger configCommandManger;
    static String MessagePromptPrefix = "§f[§dcreateX§f]:";

    public static String getMessagePromptPrefix() {
        return MessagePromptPrefix;
    }

    public static Main getMain() {
        return main;
    }
    static ConfigManger configManger;

    @Override
    public void onLoad() {//启用之前调用
        main = this;
    }

    @Override
    public void onEnable() {//启用时调用
        Plugin plugin = getServer().getPluginManager().getPlugin("patronSaint");
        if(plugin==null){
            getLogger().severe("-------------------------------");
            getLogger().severe("插件无法正常运行，原因如下：");
            getLogger().severe("缺少重要前置patronSaint");
            getLogger().severe("如果无法自行解决，可联系作者");
            getLogger().severe("jji8PlugClub——群：820131534");
            getLogger().severe("作者qq：2801819967");
            getLogger().severe("-------------------------------");
            return;
        }
        if(!(plugin instanceof cn.jji8.patronSaint.Main)){
            getLogger().severe("-------------------------------");
            getLogger().severe("插件无法正常运行，原因如下：");
            getLogger().severe("缺少重要前置patronSaint");
            getLogger().severe("如果无法自行解决，可联系作者");
            getLogger().severe("jji8PlugClub——群：820131534");
            getLogger().severe("作者qq：2801819967");
            getLogger().severe("-------------------------------");
            return;
        }
        Metrics metrics = new Metrics(this);
        loadConfig();
        Bukkit.getPluginManager().registerEvents(new Monitor(),this);
        LoadRes.loadRes(this);
        getLogger().info("加载完成..");
    }
    /**
     * 加载插件配置
     * */
    public void loadConfig(){
        List<String> strings = new ArrayList<>();
        strings.add("创作者管理");
        configCommandManger = CommandManger.load(this,"CreateXAdmin",strings,"createX.admin");
        configCommandManger.setMessagePromptPrefix(MessagePromptPrefix);
        configManger = new ConfigManger(new File(getDataFolder(),"configs.yml"));
        configManger.load("插件前缀", "§f[§dcreateX§f]:", v -> {
            MessagePromptPrefix = v;
            if(configCommandManger!=null){
                configCommandManger.setMessagePromptPrefix(v);
            }
        });
        //权限
        configManger.load("信息-需要权限才能使用", true,configCommandManger, v -> Menu.NoPermissionPrompt = v).setMessagePromptPrefix(MessagePromptPrefix);
        //全局
        configManger.load("全局-需要权限才可以使用", true,configCommandManger, v -> Menu.JudgeAuthority = v).setMessagePromptPrefix(MessagePromptPrefix);
        configManger.load("全局-必须有挖掘工具才可以挖掘", true,configCommandManger, v -> FillCanPlaceBlock.UsingMiningTools = v).setMessagePromptPrefix(MessagePromptPrefix);
        configManger.load("全局-被填方块掉落", true,configCommandManger, v -> FillCanPlaceBlock.TheExcavatedBlockFalls = v).setMessagePromptPrefix(MessagePromptPrefix);
        configManger.load("全局-必须有材料才可以填充", true,configCommandManger, v -> FillCanPlaceBlock.MaterialsAreNeeded = v).setMessagePromptPrefix(MessagePromptPrefix);
        configManger.load("全局-玩家填充速度", 1,configCommandManger, (IntSet) v -> SlowPlaceBlockManger.PlayerSpeed = v).setMessagePromptPrefix(MessagePromptPrefix);
        configManger.load("全局-全服最大填充速度", 100,configCommandManger, (IntSet) v -> SlowPlaceBlockManger.AllPlayerSpeed = v).setMessagePromptPrefix(MessagePromptPrefix);
        configManger.load("全局-模拟玩家放置和挖掘", true,configCommandManger, v -> Build.open = v).setMessagePromptPrefix(MessagePromptPrefix);
        //填充特有
        configManger.load("填充工具-玩家距离点最大距离", 100,configCommandManger, (IntSet) v -> FillManger.MaxDistance = v).setMessagePromptPrefix(MessagePromptPrefix);
        //魔棒特有
        configManger.load("魔棒工具-每次最大替换数量", 500,configCommandManger, (IntSet) v -> WandFunctionBook.maximum = v).setMessagePromptPrefix(MessagePromptPrefix);
        configManger.load("魔棒工具-允许用空气替换方块", true,configCommandManger, v -> WandFunctionBook.airReplace = v).setMessagePromptPrefix(MessagePromptPrefix);
    }
    private void sendMessage(CommandSender commandSender,String s){
        commandSender.sendMessage(MessagePromptPrefix+s);
    }
}
